Skip to content

feat(mcp): #3167 PR-B — stdio/HTTP off-switch split + os dev connect UX + exposure-policy docs#3217

Merged
os-zhuang merged 1 commit into
mainfrom
claude/mcp-server-default-wiring-ydcj2n
Jul 18, 2026
Merged

feat(mcp): #3167 PR-B — stdio/HTTP off-switch split + os dev connect UX + exposure-policy docs#3217
os-zhuang merged 1 commit into
mainfrom
claude/mcp-server-default-wiring-ydcj2n

Conversation

@os-zhuang

@os-zhuang os-zhuang commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

What & why

#3167PR-B,方向已拍定的非重叠部分。

范围调整(重要):开发期间 #3228 已在 main 落地了 HTTP 身份准入的 e2e 证明(基于 showcase、标 HIGH-RISK,并重指了 mcp-http-identity 矩阵行)。因此本 PR rebase 到 main 之上,撤掉了我原来那份重复的 cbp 证明(#3228 的更强),只保留 #3228 没做的部分。

审计确认:serve-side 插件早已默认接线(serve.ts:isMcpServerEnabled()requires.push('mcp')),HTTP 面早已准入且现已被 #3228 的 e2e 证明钉死。本 PR 补齐剩下的收口 + 可发现性 + 政策成文。

改动(单 commit)

  • Decision 2(off-switch 语义):HTTP 面与 stdio 传输此前共用一个开关——OS_MCP_SERVER_ENABLED=true 开 HTTP 的同时静默启动无 principal 的裸权限 stdio 桥。拆开:
    • @objectstack/types 新增 resolveMcpStdioAutoStart();stdio 归 OS_MCP_STDIO_ENABLED(默认关),OS_MCP_SERVER_ENABLED 只管 HTTP。旧 =true 触发 stdio 保留一 release + deprecation 警告;=false 语义不变。
    • @objectstack/mcp plugin.start() 改走新开关,legacy alias 触发时 warn 一次。未动 bridgeResources(...)(mcp-stdio-authority 探针键);矩阵该行 env 引用已同步。
  • Decision 3(dev 亲和):os dev 启动打印 MCP endpoint / skill URL / 可直接粘贴的 claude mcp add 命令(gate 在 isMcpServerEnabled(),opt-out 零广告)。
  • Decision 4(暴露政策):现行默认(非系统对象 + ai.exposed action、~10 工具脊柱)在 connect-mcp.mdx 写成 v1 承诺政策 + metadata 可著述的后续方向。
  • 附:env-var 文档拆分 + deprecation callout;blank 脚手架 README serve 侧说明;单测钉住三态开关语义;changeset(types/mcp/cli minor + create-objectstack patch)。

验证(rebase 后,本地)

不在本 PR(明确 defer)

  • stdio principal 线程化(把长驻 bridge 升级为 principal-bound)——安全改动,单独 PR;
  • showcase 自连接 demo——dogfood gate 不能变 timing-sensitive,单独 PR。

Refs #3167(PR-B)、#3228(HTTP 证明,已合)、#3202(PR-A)、ADR-0096、ADR-0097。

🤖 Generated with Claude Code

https://claude.ai/code/session_0115eg8dAaCfWaDYYAm3ma36

@vercel

vercel Bot commented Jul 18, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
spec Ready Ready Preview, Comment Jul 18, 2026 5:11pm

Request Review

@github-actions github-actions Bot added dependencies Pull requests that update a dependency file tests size/m labels Jul 18, 2026
@github-actions

github-actions Bot commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 5 package(s): @objectstack/cli, create-objectstack, @objectstack/mcp, packages/qa, @objectstack/types.

30 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/actions-as-tools.mdx (via @objectstack/mcp)
  • content/docs/ai/agents.mdx (via @objectstack/mcp)
  • content/docs/ai/index.mdx (via @objectstack/mcp)
  • content/docs/ai/natural-language-queries.mdx (via @objectstack/mcp)
  • content/docs/ai/skills-reference.mdx (via packages/cli, create-objectstack)
  • content/docs/ai/skills.mdx (via create-objectstack)
  • content/docs/api/client-sdk.mdx (via @objectstack/cli)
  • content/docs/api/data-flow.mdx (via @objectstack/cli)
  • content/docs/api/environment-routing.mdx (via @objectstack/cli)
  • content/docs/api/error-catalog.mdx (via @objectstack/cli)
  • content/docs/api/index.mdx (via @objectstack/mcp)
  • content/docs/automation/hook-bodies.mdx (via packages/cli)
  • content/docs/deployment/backup-restore.mdx (via @objectstack/cli)
  • content/docs/deployment/environment-variables.mdx (via @objectstack/mcp)
  • content/docs/deployment/self-hosting.mdx (via @objectstack/cli)
  • content/docs/getting-started/cli.mdx (via @objectstack/cli)
  • content/docs/getting-started/index.mdx (via create-objectstack)
  • content/docs/getting-started/your-first-project.mdx (via @objectstack/cli, create-objectstack)
  • content/docs/kernel/runtime-services/data-service.mdx (via packages/cli)
  • content/docs/kernel/runtime-services/index.mdx (via packages/cli)
  • content/docs/permissions/authentication.mdx (via @objectstack/cli)
  • content/docs/permissions/authorization.mdx (via packages/qa)
  • content/docs/permissions/delegated-administration.mdx (via packages/qa)
  • content/docs/plugins/packages.mdx (via @objectstack/cli, create-objectstack, @objectstack/mcp, @objectstack/types)
  • content/docs/protocol/kernel/plugin-spec.mdx (via @objectstack/cli)
  • content/docs/protocol/kernel/realtime-protocol.mdx (via @objectstack/cli)
  • content/docs/protocol/knowledge.mdx (via @objectstack/mcp)
  • content/docs/releases/implementation-status.mdx (via @objectstack/cli, @objectstack/mcp)
  • content/docs/releases/v15.mdx (via create-objectstack)
  • content/docs/releases/v9.mdx (via create-objectstack)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

@github-actions github-actions Bot added documentation Improvements or additions to documentation tooling labels Jul 18, 2026
@os-zhuang os-zhuang changed the title test(authz): e2e-prove MCP HTTP identity admission — anonymous→401, RLS-scoped == REST (#3167) feat(mcp): #3167 PR-B — MCP dev default-wiring: identity-admission e2e proof + stdio/HTTP switch split + os dev connect UX Jul 18, 2026
…he MCP endpoint on `os dev` boot (#3167)

#3167 PR-B — the direction-ratified, non-overlapping half. The HTTP
identity-admission e2e proof landed separately (#3228: showcase-based,
HIGH-RISK); this rebases onto it and keeps only what that PR did not cover.

Decision 2 (off-switch semantics): the MCP HTTP surface and the long-lived
stdio transport shared one env var — OS_MCP_SERVER_ENABLED=true turned HTTP on
AND silently auto-started the UNSCOPED stdio bridge (raw services, no
per-request principal). Split them:
- types: new resolveMcpStdioAutoStart(); stdio is now OS_MCP_STDIO_ENABLED
  (default off). OS_MCP_SERVER_ENABLED governs only HTTP. Legacy
  OS_MCP_SERVER_ENABLED=true still starts stdio for one release, flagged
  deprecated (=false only ever gated HTTP, unchanged).
- mcp: plugin.start() gates stdio on the new switch + warns once on the legacy
  alias. The bridgeResources(...) line (mcp-stdio-authority probe key) is
  untouched; the matrix row's env-var references are synced.

Decision 3 (dev affordance): `os dev` prints the MCP endpoint, skill URL, and a
ready-to-paste `claude mcp add` command on boot, gated on isMcpServerEnabled()
(opted-out deployments advertise nothing).

Decision 4 (exposure policy): documented the current default (non-system
objects + ai.exposed actions over the ~10-tool spine) as the committed v1
policy in connect-mcp.mdx, with the metadata-authorable direction noted.

Also: env-var docs updated for the split (+ deprecation callout); the blank
scaffold README documents the serve-side MCP surface; unit tests pin the new
switch semantics (canonical / legacy-deprecated / footgun-closed). Changeset
covers types+mcp+cli (minor) and create-objectstack (patch).

Refs #3167, #3228, ADR-0096, ADR-0097.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0115eg8dAaCfWaDYYAm3ma36
@os-zhuang
os-zhuang force-pushed the claude/mcp-server-default-wiring-ydcj2n branch from 4b88f9a to 192a079 Compare July 18, 2026 16:21
@os-zhuang os-zhuang changed the title feat(mcp): #3167 PR-B — MCP dev default-wiring: identity-admission e2e proof + stdio/HTTP switch split + os dev connect UX feat(mcp): #3167 PR-B — stdio/HTTP off-switch split + os dev connect UX + exposure-policy docs Jul 18, 2026
@os-zhuang
os-zhuang marked this pull request as ready for review July 18, 2026 16:40
@os-zhuang
os-zhuang merged commit 83e8f7d into main Jul 18, 2026
18 of 19 checks passed
@os-zhuang
os-zhuang deleted the claude/mcp-server-default-wiring-ydcj2n branch July 18, 2026 16:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file documentation Improvements or additions to documentation size/m tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants